iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
DevOps

30天的社群機器人之旅系列 第 7

Day 07 ImageMessage, VideoMessage & AudioMessage

  • 分享至 

  • xImage
  •  

昨天完整的講完了 TextMessage 之後,今天要來接著講同屬於 Message Event 底下不同類別的 ImageMessage, VideoMessage 跟 AudioMessage 了。

雖然都同屬於 Message Event ,但今天要介紹的三個類別跟前面介紹的 TextMessage 處理方式相當不同,而且使用頻率不算低,因此需要著重介紹一下。

首先是 ImageMessage ,我們還是一樣先幫 handler 加入一個處理函式。

@handler.add(MessageEvent, message=(ImageMessage))
def handle_media(event):
    pass

接著我們可以參考官方的介紹

webhook 會傳來的一些事件 (Event) 及其格式 - Webhook event object

從官方文件我們可以得知,傳入的消息並不會包含圖片本身,需要我們先取得 Message ID 之後,再經由另一隻 API 去下載圖片。

因此,我們可以改成如下。

@handler.add(MessageEvent, message=(ImageMessage))
def handle_media(event):
    content = line_bot_api.get_message_content(event.message.id)
    os.makedirs("Media", exist_ok=True)
    with open(F"Media/{event.message.id}.{content.content_type.split('/')[1].lower()}", "wb") as fp:
        for iter_data in content.iter_content():
            fp.write(iter_data)
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.id)
    )

LineBotApi 有內建一個好用的方法 get_message_content ,可以直接幫我們取得檔案內容,所以我們只需要把取得的內容存下來就 OK 了,這邊因為 Line 可以接收 jpeg or png 兩種格式,因此我們需要取得 Content-Type 判斷是哪種格式在儲存。

接著我們就可以來試試 VideoMessage 跟 AudioMessage ,影片的部分 Line 只支援 mp4 格式,聲音只支援 aac 格式,因此我們可以將上面的程式改成這樣。

@handler.add(MessageEvent, message=(ImageMessage, VideoMessage, AudioMessage, FileMessage))
def handle_media(event):
    content = line_bot_api.get_message_content(event.message.id)
    os.makedirs(f"Media/{event.message.type.title()}", exist_ok=True)
    with open(F"Media/{event.message.type.title()}/{event.message.id}.{content.content_type.split('/')[1].lower()}", "wb") as fp:
            for iter_data in content.iter_content():
                fp.write(iter_data)
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.id)
    )

這樣就可以成功將圖片、影像與聲音的檔案接儲存下來了。

那麼就先到這邊, Line 中最常使用的幾種 Message 我們都可以進行處裡了,但各位有沒有發現還少一種也很常見的 Message 沒處理到呢?

大家掰~掰~


上一篇
Day 06 TextMessage
下一篇
Day 08 FileMessage
系列文
30天的社群機器人之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言